#include<bits/stdc++.h>
using namespace std;
inline long long read(){
	long long ret=0,neg=1;
	char c=(char)getchar();
	while(c!='-'&&isdigit(c)==false) c=(char)getchar();
	if(c=='-'){
		neg=-1;
		c=(char)getchar();
	}
	while(isdigit(c)){
		ret=ret*10+c-'0';
		c=(char)getchar();
	}
	return ret*neg;
}
void write(long long x){
	if(x<0){
		putchar('-');
		x=-x;
	}
	if(x>=10) write(x/10);
	putchar((x%10)+'0');
}

bool vis[60010];

int n,m;
int px[8010],py[8010];
long long val[8010];

bitset<3010> s[8010],l[8010];
struct EEE{
	int x,y,d;
}e[8010*8010];
bool cmp(EEE x,EEE y){
	return x.d<y.d;
}

int main(){
	freopen("chess.in","r",stdin);
	freopen("chess.out","w",stdout);
	vis[0]=vis[1]=true;
	for(int i=2;i<=60000;++i){
		if(vis[i]==false){
			for(int j=i+i;j<=60000;j+=i){
				vis[j]=true;
			}
		}
	}
	// int cnt=0;
	for(int i=0;i<=60000;++i){
		if(vis[i]==false&&(i%20==3||i<=10)){
			// ++cnt;
			vis[i]=true;
		}
		else vis[i]=false;
	}
	// write(cnt);
	int TTT=read();
	while(TTT--){
		n=read();
		m=read();
		for(int i=1;i<=n;++i){
			px[i]=read();
			py[i]=read();
		}
		for(int i=1;i<=n;++i){
			val[i]=read();
		}
		if(n<=100){
			long long ans=0;
			int arr[3];
			for(int i=1;i<=n;++i){
				for(int j=i+1;j<=n;++j){
					for(int k=j+1;k<=n;++k){
						arr[0]=abs(px[i]-px[j])+abs(py[i]-py[j]);
						arr[1]=abs(px[i]-px[k])+abs(py[i]-py[k]);
						arr[2]=abs(px[k]-px[j])+abs(py[k]-py[j]);
						sort(arr,arr+3);
						if(vis[arr[1]]){
							ans+=val[i]+val[j]+val[k];
						}
					}
				}
			}
			write(ans);
			putchar('\n');
		}
		else{
			// int cnt=0;
			int idx=0;
			for(int i=1;i<=n;++i){
				for(int j=i+1;j<=n;++j){
					// if(vis[abs(px[i]-px[j])+abs(py[i]-py[j])]){
					// 	++cnt;
					// }
					++idx;
					e[idx].d=abs(px[i]-px[j])+abs(py[i]-py[j]);
					e[idx].x=i;
					e[idx].y=j;
				}
			}
			sort(e+1,e+1+idx,cmp);
			// cout<<"sorted!\n";
			for(int i=1;i<=n;++i){
				s[i].reset();
				l[i].set();
				l[i][i]=0;
			}
			long long ans=0;
			int opcnt=0;
			for(int i=1;i<=idx;++i){
				int x,y;
				x=e[i].x;
				y=e[i].y;
				l[x][y]=0;
				l[y][x]=0;
				if(i!=1){
					s[e[i-1].x][e[i-1].y]=1;
					s[e[i-1].y][e[i-1].x]=1;
				}
				if(vis[e[i].d]){
					ans+=(s[x]&l[y]).count();
					ans+=(l[x]&s[y]).count();
					opcnt+=2;
				}
			}
			// cout<<n<<' '<<m<<endl;
			write(ans*3ll);
			putchar('\n');
		}
	}
	return 0;
}